#!/usr/bin/env python

################################################################################
# Python Standard Library
################################################################################

################################################################################
# Includes
################################################################################

from protocols.d2 import D2Packet, D2Socket
from protocols.realm import RealmPacket, RealmSocket
from protocols.client import ClientPacket, ClientSocket

################################################################################
# Packets
################################################################################

################################################################################
# Packet Handlers
################################################################################

class D2RCPacket(D2Packet, RealmPacket, ClientPacket):
	"""
	Diablo II Realm Client Packet
	"""
	
	def __init__(self):
		D2Packet.__init__(self)
		RealmPacket.__init__(self)
		ClientPacket.__init__(self)
	
	def unpack(self):
		print "Unpacking BNRC packet..."
		
		self.dispatchEvent("unpack", (self,))
		
		print "BNRC packet unpacked."
	
	def pack(self):
		print "Packing BNRC packet..."
		
		self.dispatchEvent("pack", (self,))
		
		print "BNRC packet packed."
		
		return self.message

################################################################################
# Socket Handlers
################################################################################

class D2RCSocket(D2Socket, RealmSocket, ClientSocket):
	"""
	Diablo II Realm Client Socket
	"""
	
	def __init__(self, sock = None):
		D2Socket.__init__(self, sock)
		RealmSocket.__init__(self, sock)
		ClientSocket.__init__(self, sock)
	
	def unpackPackets(self):
		i, l = 0, len(self.data)
		
		while i < l:
			packet = D2RCPacket()
			packet.socket = self
			packet.messageLength = len(self.data)
			packet.message = self.data
			
			packet.unpack()
			
			self.packets.append(packet)
			
			i += packet.messageLength
		
		self.data = ''